const path = require('path');
import { defineConfig,loadEnv } from 'vite'
import vue from '@vitejs/plugin-vue'


// https://vitejs.dev/config/
export default ({ command, mode }) =>{
  const htmlPlugin = () => {
    const title=loadEnv(mode, process.cwd()).VITE_APP_TITLE;
    return {
      name: 'html-transform',
      transformIndexHtml(html) {
        return html.replace(
          /<title>(.*?)<\/title>/,
          `<title>${title}</title>`
        )
      }
    }
  }
  const config = loadEnv(mode, './');
  return defineConfig({
    plugins: [
      vue(),
      htmlPlugin(),
      
    ],
    resolve:{
      alias: {// 配置路径别名
        '@': path.resolve(__dirname, './src'),
        'com': path.resolve(__dirname, './src/components'),
        'tool': path.resolve(__dirname, './src/tool'),
        'views': path.resolve(__dirname, './src/views'),
        'pais': path.resolve(__dirname, './src/pais'),
      },
    },
    server: {//设置ip访问方案1
      host: '0.0.0.0',
      port:"3001",
      strictPort:true,//设为 true 时若端口已被占用则会直接退出，而不是尝试下一个可用端口。
      open:false,//开发阶段打开自动浏览器
      '/api': {
        target:config.VITE_APP_API_URL,//当前环境域名基本不用动
        changeOrigin: true,
        rewrite: (path) => path.replace(/^\/api/, '')
      },
    },
    build:{
      outDir: 'build', //指定输出路径（相对于 项目根目录). 建议使用系统默认
      assetsDir:'public', // 指定生成静态资源的存放路径（相对于 build.outDir）
      cssCodeSplit:true,//启用/禁用 CSS 代码拆分。当启用时，在异步 chunk 中导入的 CSS 将内联到异步 chunk 本身，并在其被加载时插入。如果禁用，整个项目中的所有 CSS 将被提取到一个 CSS 文件中。
      brotliSize:true,//启用/禁用 brotli 压缩大小报告。压缩大型输出文件可能会很慢，因此禁用该功能可能会提高大型项目的构建性能。
      chunkSizeWarningLimit:1000,
      minify:'terser',//配置自定义去除
      terserOptions: {
        compress: {
          // 生产环境去除console  debugger
          drop_console: true,
          drop_debugger:true,
        }
      },
      // build切片
      rollupOptions: {
        output:{
          manualChunks(id) {
            if (id.includes('node_modules')) {
              return id.toString().split('node_modules/')[1].split('/')[0].toString();
            }
          }
        },
        // 用于从入口点创建的块的打包输出格式[name]表示文件名,[hash]表示该文件内容hash值
    　　entryFileNames: 'js/[name].[hash].js',
    　　// 用于命名代码拆分时创建的共享块的输出命名
    　　chunkFileNames: 'js/[name].[hash].js',
    　　// 用于输出静态资源的命名，[ext]表示文件扩展名
    　　assetFileNames: '[ext]/[name].[hash].[ext]',
    　　// 拆分js到模块文件夹
  //   　　chunkFileNames: (chunkInfo) => {
  // 　　    const facadeModuleId = chunkInfo.facadeModuleId ? chunkInfo.facadeModuleId.split('/') : [];
  // 　　    const fileName = facadeModuleId[facadeModuleId.length - 2] || '[name]';
  // 　　    return `js/${fileName}/[name].[hash].js`;
  //   　　},
      },
   
    }
  })
}
